package gradle2;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class LongDistanceCall {
    private static final double INITIAL_RATE = 0.05; // 初始费率（美元/分钟）
    private static final double OVER_20_RATE = 0.10; // 超过20分钟部分的费率（美元/分钟）
    private static final double LONG_CALL_FEE = 1.00; // 长通话附加费（美元）
    private static final int MAX_CALL_DURATION = 30 * 60 * 60; // 最长允许通话时间（秒）

    /**
     * 计算通话费用
     *
     * @param startTime 通话开始时间，格式为 "yyyy-MM-dd HH:mm:ss"
     * @param endTime   通话结束时间，格式为 "yyyy-MM-dd HH:mm:ss"
     * @return 通话费用（美元）
     * @throws IllegalArgumentException 如果通话时间超过30小时
     */
    public static double calculateFee(String startTime, String endTime) throws IllegalArgumentException {
        LocalDateTime startDateTime = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        LocalDateTime endDateTime = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        Duration duration = Duration.between(startDateTime, endDateTime);
        long seconds = duration.getSeconds();

        if (seconds <= 0) {
            return 0; // 通话时间为0或负数，不收费
        } else if (seconds > MAX_CALL_DURATION) {
            throw new IllegalArgumentException("通话时间超过30小时"); // 抛出异常
        }

        long minutes = (seconds + 59) / 60; // 向上进位到分钟

        if (minutes <= 20) {
            return Math.ceil(minutes) * INITIAL_RATE;
        } else {
            return LONG_CALL_FEE + (minutes - 20) * OVER_20_RATE;
        }
    }
}
